home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / lang / sofa.lha / sofa / smalleiffel / man / Eiffel.FAQ < prev    next >
Text File  |  2000-03-25  |  54KB  |  1,371 lines

  1.  
  2. Archive-name: eiffel-faq
  3. Posting-Frequency: approximately monthly
  4. Last-modified: 05 July 1999
  5.  
  6.  EIFFEL: FREQUENTLY ASKED QUESTIONS
  7.  ----------------------------------
  8.  
  9. This question-and-answer list is posted monthly to the Usenet
  10. newsgroups comp.lang.eiffel, comp.answers and news.answers.
  11.  
  12. Please send corrections, additions and comments to Franck Arnaud
  13. (franck_arnaud@tcam.com).
  14.  
  15. This information is abstracted and condensed from the posts of many
  16. contributors to comp.lang.eiffel, supplemented by information from
  17. vendors. No guarantees are made regarding its accuracy.
  18.  
  19. This compilation is by Franck Arnaud. Distribution is unrestricted.
  20. It builds on the work of the previous maintainers: Rock Howard,
  21. Roger Browne, Conrad Taylor in chronological order.
  22.  
  23. You can receive the latest copy by anonymous file transfer from:
  24.  
  25.    ftp://ftp.cm.cf.ac.uk/pub/eiffel/eiffel-faq
  26.    ftp://rtfm.mit.edu/pub/usenet/news.answers/eiffel-faq
  27.  
  28. or by sending an email message to mail-server@rtfm.mit.edu with this
  29. message body:
  30.  
  31.    send /pub/usenet/news.answers/eiffel-faq
  32.  
  33.  --------------------
  34.  
  35. WHAT'S NEW?
  36.  
  37. Changes since the last posting:
  38.  
  39.    QCOM  Updated Halstenbach's entry.
  40.    QSTD  Nice membership free for 1999.
  41.    QCOM  SmallEiffel -0.78/
  42.    QWEB  Cetus Links and Smalleiffel site added
  43.    QLIB  Library questions added
  44.    QTGV  Rewritten
  45.  
  46.  --------------------
  47.  
  48. CONTENTS
  49.  
  50. Frequently Asked Questions:
  51.  
  52.    QEIF  What is Eiffel?
  53.    QORI  Where did Eiffel come from?
  54.    QCOM  What Eiffel compilers are available?
  55.    QLIB  What Eiffel libraries are available?
  56.    QFRE  Is Eiffel available for free or as shareware?
  57.    QARC  Is there an archive of the comp.lang.eiffel newsgroup?
  58.    QBOK  What books are available for learning about Eiffel?
  59.    QWEB  Where can I find Eiffel on the World-Wide-Web?
  60.    QEDI  Where can I get an Eiffel editor or emacs-mode?
  61.    QBON  What is BON?
  62.    QSAT  What is Sather? How does it compare to Eiffel?
  63.    QSTD  Are there standards for the Eiffel language?
  64.    QTGV  How fast do Eiffel applications run?
  65.    QGRP  Are there any Eiffel user groups?
  66.    QADR  Where can I get Eiffel products and services?
  67.    QCNF  Are there any conferences for Eiffel users?
  68.    QECC  Why do most Eiffel implementations compile to C?
  69.    QJVM  Where can I get an Eiffel to Java compiler?
  70.  
  71. Language Issues:
  72.  
  73.    LFEA  What features does Eiffel have?
  74.    LCHN  What changes have been made to the Eiffel language definition?
  75.    LLIB  What libraries come with Eiffel?
  76.    LDBC  What's the big deal about preconditions and postconditions?
  77.    LCON  Please explain and discuss covariance vs. contravariance.
  78.    LCAT  Is it true that there are "holes" in the Eiffel type system?
  79.    LTSK  Is there support for concurrency in Eiffel?
  80.    LOVL  Why doesn't Eiffel allow function overloading?
  81.    LPRC  Why are there no procedural types in Eiffel?
  82.    LATR  Why are there no class attributes in Eiffel?
  83.    LPAR  How can I call the parent-class version of a redefined
  84.          routine?
  85.    LEVC  Where can I find a comparison between Eiffel and C++?
  86.    LDES  Are there any destructors in Eiffel?
  87.    LDIS  How do I implement multiple inheritance efficiently?
  88.    LISA  How does the `Iterating several actions' example in ETL work?
  89.  
  90.  --------------------
  91.  
  92. QEIF: What is Eiffel?
  93.  
  94. Eiffel is an advanced object-oriented programming language that
  95. emphasizes the design and construction of high-quality and reusable
  96. software.
  97.  
  98. Eiffel is not a superset or extension of any other language. Eiffel
  99. strongly encourages OO programming and does not allow dangerous
  100. practices from previous generation languages although it does
  101. interface to other languages such as C and C++. Eiffel supports the
  102. concept of "Design by Contract" to improve software correctness.
  103.  
  104. Beyond the language aspect Eiffel may be viewed as a method of
  105. software construction. Eiffel is an excellent vehicle for software
  106. education, including for a first programming course.
  107.  
  108.  --------------------
  109.  
  110. QORI: Where did Eiffel come from?
  111.  
  112. Eiffel was created by Bertrand Meyer and developed by his company,
  113. Interactive Software Engineering (ISE) of Goleta, CA.
  114.  
  115. Dr. Meyer borrowed on his extensive experience with OOP, particularly
  116. with Simula. He also added in important concepts from his academic
  117. work on software verification and computer language definition.
  118.  
  119. Eiffel's design addresses many practical concerns that software
  120. engineers face when creating complex software. Eiffel has evolved
  121. continually since its conception on September 14, 1985 and its first
  122. introduction in 1986.
  123.  
  124. Eiffel is named after Gustave Eiffel, the engineer who designed the
  125. Eiffel Tower.
  126.  
  127.  --------------------
  128.  
  129. QCOM: What Eiffel compilers are available?
  130.  
  131. The following Eiffel compilers are currently available and supported
  132. by their vendors or authors. The list is ordered by date of first
  133. publication.
  134.  
  135. In the case of commercial products, the price is not mentioned because
  136. there can be varying conditions depending on platforms, conditions of
  137. use (personal vs. professional), etc. Please check with the vendors'
  138. web-sites for up to date pricing information. As a rule of thumb,
  139. limited or personal versions of compilers cost from US$ 50 to US$ 200
  140. while a full-blown compiler for a single-user licence and the right to
  141. royalty-free distribution varies from US$ 200 to US$ 1500, on
  142. mainstream platforms.
  143.  
  144. In the list below, the 'target' entry indicates what code is produced
  145. by the compiler. Most -- but not all -- compilers produce C code so a
  146. supported C compiler may be needed.
  147.  
  148. In the 'platform' entry, an indication of supported platforms is given.
  149. "Win32" means Windows 95 and Windows NT on Intel x86. No compiler (but
  150. indirectly Smalleiffel) is available under Windows NT on RISC platforms
  151. to the best of our knowledge. "Unix" means various Unices, check with
  152. vendor for the actual list of platforms. Most vendors supporting Unix
  153. do support Linux on Intel x86.
  154.  
  155. The 'brief description' sections are abstracted from the vendors' web
  156. pages.
  157.  
  158.  
  159.  Vendor: Interactive Software Engineering Inc, USA
  160.  Product: ISE Eiffel (current version: 4.3)
  161.  Licensing conditions: Commercial; free time-limited evaluation version
  162.  Target: C
  163.  Platforms: Win32, Unix
  164.  Web: http://www.eiffel.com/
  165.  
  166.  Brief description:
  167.   The ISE Eiffel environment includes:
  168.   - EiffelBench, a complete graphical development environment with
  169.     unique facilities for fast compilation, power browsing,
  170.     documentation, symbolic debugging and more
  171.   - EiffelBase, which is also available under an open source license,
  172.     is a complete and professional set of classes covering containers,
  173.     collections, I/O, iterators, object persistence, table
  174.     searching etc.
  175.   - Under Windows, the Windows Eiffel Library (WEL), combining the
  176.     power of Eiffel with access to the Windows API.
  177.  
  178.  
  179.  Vendor: Dominique Colnet et al
  180.  Product: SmallEiffel the GNU Eiffel compiler (current version: -0.78)
  181.  Licensing conditions: Freeware (GPL)
  182.  Target: ANSI C / Java Virtual Machine
  183.  Platforms: Any ANSI C machine
  184.  Web: http://smalleiffel.loria.fr/
  185.  
  186.  Brief description:
  187.   SmallEiffel is intended to be a complete, though small and very fast,
  188.   free Eiffel compiler, available for a wide range of platforms.
  189.   It includes an Eiffel to C compiler, an Eiffel to Java bytecode
  190.   compiler, a documentation tool, a pretty printer, etc.
  191.   SmallEiffel uses an innovative strategy involving whole system
  192.   analysis which allows compilation to be often faster than the
  193.   incremental compilation of traditional compilers.
  194.   It was originally designed at the LORIA lab, Nancy, France,
  195.   in 1994-95, and has been used worldwide by many individuals
  196.   and Universities since September 1995.
  197.  
  198.  
  199.  Vendor: Halstenbach ACT GmbH, Germany
  200.  Product: iss-base (current version: 3.0)
  201.  Licensing conditions: Commercial; 90-day free evaluation version, free
  202.                        private version for noncomercial use (Win32, Linux)
  203.  Target: ANSI C
  204.  Platforms: Win32, Unix
  205.  Web: http://www.halstenbach.com/ or http://www.halstenbach.de/
  206.  
  207.  Brief description:
  208.   iss-base is especially targeted to the creation of complex, mission
  209.   critical applications with a strong focus on software quality.
  210.   As an independent developer of Eiffel technology, Halstenbach has
  211.   created a development environment covering the whole software life
  212.   cycle. Major strenghs of iss-base are robustness, speed of compilation,
  213.   a sophisticated UIMS with full Windows'95/NT support and corresponding
  214.   GUI builder, reliable ODBC support, portability between Unix and
  215.   Windows, many libraries especically for writing commercial
  216.   applications, e.g., CORBA connectivity, extensive date/time support,
  217.   BCD-arithmetics, support for report generators, etc.
  218.  
  219.   (Note: the compiler and base libraries are based on but not the same
  220.   as ISE Eiffel. Other parts of the product are unrelated with ISE
  221.   products.)
  222.  
  223.  
  224.  Vendor: Object Tools GmbH, Germany
  225.  Product: Visual Eiffel (current version: 2.6)
  226.  Licensing conditions: Commercial; free feature-limited eval. version
  227.  Target: Native Intel x86
  228.  Platforms: Win32 only
  229.  Web: http://www.object-tools.com/ or http://www.eiffel.de/
  230.  
  231.  Brief description:
  232.   Using Visual Eiffel and DM will help you to develop complex Windows
  233.   applications in a very short time. Visual Eiffel gives you
  234.   - an integrated workbench with the Windows look and feel
  235.   - a professional Eiffel compiler producing very efficient native
  236.     code for Intel processors
  237.   - DM - the most rapid RAD tool you have ever seen gives you
  238.     everything to build applications for Windows fast.
  239.   - many useful libraries for the production of commercial Windows
  240.     applications - for ActiveX component integration, for ODBC access,
  241.     for the creation of nice graphical packages and much more.
  242.  
  243.  
  244. Other Eiffel compilers are worth mentioning although they may be
  245. either not supported any more, or an older version, or at an early
  246. stage of development so that their implementation of the language
  247. may be far from complete.
  248.  
  249.  
  250.  - A beta version of Eiffel/S 2.0 (not 1.3) is available from
  251.    Object Tools for PowerPC-based Apple Macintosh. It works
  252.    with the Codewarrior C compiler and IDE. It includes MOTEL,
  253.    a library wrapping the most common Mac toolbox entities and
  254.    providing an event driven application framework.
  255.    http://www.object-tools.com/
  256.  
  257.  - FEC is a native Eiffel compiler for SUN SPARC machines. An early
  258.    beta version (including the full source code) can be downloaded
  259.    from Fridtjof Siebert's page at
  260.    http://www.informatik.uni-stuttgart.de/ifi/ps/siebert/fridi_eiffel.html
  261.  
  262.  - SIG Eiffel/S, version 1.3: Eiffel/S was the first Eiffel 3
  263.    compiler, and the first Eiffel compiler available on the PC
  264.    platform. Version 1.3, is still available as shareware from
  265.    Object Tools (formerly SIG) but it is a few years old. A
  266.    much improved version has been announced for a while,
  267.    but is not generally available (except for the Mac). Eiffel/S 1.3
  268.    is a command line compiler producing C code, it is available
  269.    for DOS32, Windows 95 and NT and many Unix platforms.
  270.    Object Tools is at http://www.object-tools.com/.
  271.  
  272.  - J-Eiffel is an Eiffel compiler generating JVM bytecode. A very early
  273.    version of the compiler -- including the source code -- is available
  274.    on Pirmin Kalberer's web site at http://www.spin.ch/~kalberer/
  275.  
  276.  - EON Eiffel: An Eiffel to C++ compiler, written in C++,
  277.    not actively maintained.
  278.  
  279.  - TowerEiffel was a commercial compiler with an emphasis on the performance of
  280.    generated code. It is not actively maintained or sold as Tower Technology
  281.    has moved on to write a static Java compiler using the same kinds of
  282.    system-wide optimisations found in most Eiffel compilers.
  283.  
  284.  --------------------
  285.  
  286. QLIB: What Eiffel libraries are available?
  287.  
  288. Eiffel vendors usually supply a large set of libraries with their
  289. compilers, and provide others as additions.
  290.  
  291. Many libraries, usually open source, are available from third
  292. parties and are too numerous to list here. See QWEB for reference
  293. websites which have listings of available libraries.
  294.  
  295.  --------------------
  296.  
  297. QFRE: Is Eiffel available for free or as shareware?
  298.  
  299. SmallEiffel is a freeware compiler, provided as a highly
  300. portable C package that can compile on most ANSI C platforms.
  301. The full Eiffel source code of the compiler itself (in
  302. Eiffel) is included. The official website is at
  303. http://smalleiffel.loria.fr/
  304.  
  305. A ready-to-run package for Windows, including a freeware C
  306. compiler, is available at http://www.elj.com/elj-win32/
  307.  
  308. Many commercial vendors offer free evaluation versions, with
  309. some limitations. Commercial vendors often also have cheap
  310. entry-level versions for popular platforms like Win32 on
  311. Intel-based PCs.
  312.  
  313.  --------------------
  314.  
  315. QARC: Is there an archive of the comp.lang.eiffel newsgroup?
  316.  
  317. Yes, on the WWW at:
  318.   http://www.cm.cf.ac.uk/CLE/
  319. or at the following FTP sites:
  320.   ftp://wuarchive.wustl.edu/usenet/comp.lang.eiffel/
  321.  
  322. The newsgroup is also archived at the usual places on the web
  323. (Deja.com, AltaVista, etc).
  324.  
  325.  --------------------
  326.  
  327. QBOK: What books are available for learning about Eiffel?
  328.  
  329.  
  330. ESSENTIAL READING
  331.  
  332.  Title: Object-Oriented Software Construction, second edition
  333. Author: Bertrand Meyer, ISE Inc.
  334.   ISBN: ISBN 0-13-629155-4 - Prentice Hall 1997
  335.  Short: This book is the comprehensive reference on all aspects of
  336.         object technology, from design principles to O-O techniques,
  337.         Design by Contract, O-O analysis, concurrency, persistence,
  338.         abstract data types and many more. Written by a pioneer in
  339.         the field, contains an in-depth analysis of both
  340.         methodological and technical issues.
  341.  
  342.         While not presented as an 'Eiffel book' (Eiffel is presented
  343.         as the 'notation' used to illustrate the concept) it is
  344.         essential reading for any Eiffelist and it actually includes
  345.         a rather complete description of the 'notation' -- Eiffel.
  346.  
  347.         Comes with a CD-ROM containing: the complete hyperlinked text,
  348.         for easy reference; software to read the text on major industry
  349.         platforms; supplementary material (reusable components,
  350.         mathematical complements); and a complete graphical O-O
  351.         development environment supporting the concepts of the book.
  352.  
  353.  
  354.  Title: Eiffel: The Language
  355. Author: Bertrand Meyer
  356.   ISBN: ISBN 0-13-247925-7 -- Prentice Hall 1992
  357.  Short: This book combines an introduction to Eiffel, the language
  358.         reference, and a good deal of philosophy into its 600 pages.
  359.         This is a rigorous and comprehensive book which some readers
  360.         may find heavy going despite Dr. Meyer's clarity of expression.
  361.         It is the definitive language reference, and essential reading
  362.         for all serious Eiffel users. Get the second or later printing
  363.         (same ISBN), which includes many corrections and changes (there
  364.         is not a second edition, and none is currently underway). This
  365.         book is also available in French (ISBN 2-7296-0525-8).
  366.  
  367.  
  368. OTHER BOOKS
  369.  
  370.  Title: Object Oriented Programming in Eiffel, 2nd edition
  371. Author: Pete Thomas and Ray Weedon -- ISBN: 0-201-33131-4 -- AW 1997
  372.  Short: This book is a very comprehensive Eiffel tutorial and textbook,
  373.         with a solid "Abstract Data Type" approach.
  374.  
  375.  Title: Algorithms and Data Structures
  376. Author: Jeffrey Kingston -- ISBN: 0-201-40374-9 -- AW 1997
  377.  Short: A treatment of the central algorithms and data structures of
  378.         computer science, including complete Eiffel implementations.
  379.  
  380.  Title: An Object-Oriented Introduction to Computer Science Using Eiffel
  381. Author: Richard Wiener -- ISBN: 0-13-838725 -- PH 1997
  382.  Short: None
  383.  
  384.  Title: Object Technology for Scientific Computing Object-Oriented
  385.             Numerical Software in Eiffel and C
  386. Author: Paul Dubois -- ISBN: 0-13-267808-X -- PH 1996
  387.  Short: Accompanying CD with the Free Eiffel for UNIX & Linux
  388.         environments.
  389.  
  390.  Title: Object-Oriented Software Engineering with Eiffel
  391. Author: Jean-Marc Jezequel -- ISBN: 0-201-63381-7 -- AW 1996
  392.  Short: A comprehensive guide to Eiffel. In addition to describing
  393.         Eiffel, the book contains descriptions and comparisons of
  394.         compilers and libraries available on the market.
  395.  
  396.  Title: Object Structures: Building OO Software Components with Eiffel
  397. Author: Jacob Gore -- ISBN: 0-201-63480-5 -- AW 1996
  398.  Short: This is the first "data structures" book for Eiffel, bringing
  399.         to the study of that language the first comprehensive
  400.         treatment of one of the most important topics in any
  401.         programming language.
  402.  
  403.  Title: Eiffel Object-Oriented Programming
  404. Author: John Tyrrell -- ISBN: 0-333-64554-5 -- 1995
  405.  Short: This is an inexpensive and very approachable book.
  406.  
  407.  Title: Software Development Using Eiffel: There can be life other than C++
  408. Author: Richard Wiener -- ISBN: 0-13-100686-X -- PH 1995
  409.  Short: This is a useful book with a lot of code examples for those
  410.         with a grounding in another OO language.
  411.  
  412.  Title: Object Success
  413. Author: Bertrand Meyer -- ISBN: 0-13-192833-3 -- PH 1995
  414.  Short: This book is a  manager's guide to object orientation, its
  415.         impact on the corporation and its use for re-engineering the
  416.         software process.
  417.  
  418.  Title: Object Oriented Programming in Eiffel
  419. Author: R. Rist and R. Terwilliger -- ISBN: 0-13-205931-2 -- PH 1995
  420.  Short: This is a textbook with an emphasis on design.
  421.  
  422.  Title: Seamless Object-Oriented Software Architecture: Analysis and
  423.             Design of Reliable Systems
  424. Author: Kim Walden & Jean-Marc Nerson -- ISBN: 0-13-031303-3 -- PH 1994
  425.  Short: This book describes the Business Object Notation (BON) Method
  426.         in detail.
  427.  
  428.  Title: Reusable Software: The Base Object-Oriented Component Libraries
  429. Author: Bertrand Meyer -- ISBN: 0-13-245499-8 -- PH 1994
  430.  Short: This book describes principles of library design and the
  431.         taxonomy of fundamental computing structures. Serves as a
  432.         manual for the EiffelBase libraries.
  433.  
  434.  Title: An Object-Oriented Environment: Principles and Application
  435. Author: Bertrand Meyer -- ISBN: 0-13-245507-2 -- PH 1994
  436.  Short: This book describes the ISE EiffelBench environment as well as
  437.         the "Melting Ice" compilation technology and the EiffelBuild
  438.         GUI application builder.
  439.  
  440.  Title: Object-Oriented Applications
  441. Author: Meyer and Nerson editors -- ISBN: 0-13-013798-7 -- PH 1993
  442.  Short: This book includes an introduction to Eiffel technology
  443.         followed by seven in-depth descriptions of large applications
  444.         written in Eiffel.
  445.  
  446.  Title: Eiffel: Objektorientiertes Programmieren in der Praxis
  447. Author: Frieder Monninger -- ISBN: ISBN 3-88229-028-5 -- 1993
  448.  Short: This book is a very down-to-earth Eiffel handbook in German.
  449.  
  450.  Title: Eiffel: An Introduction
  451. Author: Robert Switzer -- ISBN: 0-13-105909-2 -- PH 1993
  452.  Short: This book is a very clear and concise Eiffel primer, with many
  453.         code fragments and two substantial Eiffel applications. Also
  454.         available in French (ISBN 2-225-84-656-1).
  455.  
  456.  Title: Object Oriented Software Construction, first edition
  457. Author: Bertrand Meyer -- ISBN: 0-13-629049-3 -- PH 1988
  458.  Short: An earlier edition of the second edition mentioned above, based
  459.         on a previous version of the language.
  460.         Also available in French, German, Italian, Dutch, etc.
  461.  
  462. Publishers are Addison Wesley (AW) and Prentice Hall (PH).
  463.  
  464.  --------------------
  465.  
  466. QWEB: Where can I find Eiffel on the World-Wide-Web?
  467.  
  468. http://www.cm.cf.ac.uk/CLE/
  469.   An Eiffel home page that is held on the University of Wales College
  470.   of Cardiff's server.
  471.  
  472. http://www.eiffel-forum.org/
  473.   The web site of the Eiffel Forum user group includes a repository
  474.   of free software and information on the current projects.
  475.  
  476. http://www.elj.com/
  477.   Geoff Eldridge's Eiffel pages including GUERL, a preview of Eiffel
  478.   Liberty, an online journal, the online C++ Critique, and other
  479.   useful information.
  480.  
  481. http://www.eiffel.tm/
  482.   A directory of Eiffel resources maintained by Roger Browne of
  483.   Everything Eiffel.
  484.  
  485. http://www.cetus-links.org/
  486.   Cetus Links is a directory of resources on object-oriented
  487.   programming, including useful Eiffel pages.
  488.  
  489. The main vendors websites are:
  490.  
  491.  Halstenbach ACT   http://www.halstenbach.de/
  492.  ISE               http://www.eiffel.com/
  493.  Object Tools      http://www.object-tools.com/
  494.  SmallEiffel       http://smalleiffel.loria.fr/
  495.  
  496.  --------------------
  497.  
  498. QEDI: Where can I get an Eiffel editor or emacs-mode?
  499.  
  500. Tower Technology Corporation supplies an Eiffel 3 emacs mode that
  501. supports syntax-directed highlighting, auto-indentation and is easily
  502. customized for font use, color and indentation amounts. It comes as
  503. part of the TowerEiffel system, but is also available free for anyone
  504. who requests it. Send email to elisp@atlanta.twr.com to get the latest
  505. version.
  506.  
  507. The WINEDIT shareware programmer's editor offers colour syntax
  508. highlighting, works with Eiffel/S under MS-Windows, and is available
  509. from all main Windows shareware archives.
  510.  
  511. Alan Philips' free Programmers File Editor also works with Eiffel/S
  512. under MS-Windows, has templates but not syntax highlighting, available
  513. from http://www.lancs.ac.uk/people/cpaap/pfe/ .
  514.  
  515. The vim editor, an enhanced version of Unix's vi, includes Reimer
  516. Behrend's Eiffel syntax file as part of the standard distribution,
  517. from http://www.vim.org/ .
  518.  
  519. Franck Arnaud's Eiffel extension to the Windows/WindowsNT programmers
  520. editor Codewright from Premia implements chromacoding of Eiffel code,
  521. has smart indenting and some templates. Available from
  522. http://www.altsoft.demon.co.uk/free/ .
  523.  
  524.  --------------------
  525.  
  526. QBON: What is BON?
  527.  
  528. BON ("Business Object Notation") is a method for high-level analysis
  529. and design, offering a seamless reversible transition to an Eiffel
  530. implementation. The method emphasizes Design by Contract and
  531. systematic development.
  532.  
  533. ISE supports BON with its EiffelCase tool.
  534.  
  535.  --------------------
  536.  
  537. QSAT: What is Sather? How does it compare to Eiffel?
  538.  
  539. Sather is an OO language, originally patterned after Eiffel but now
  540. very different, created at ICSI of Berkeley, CA.
  541.  
  542. Sather does not support Design by Contract, but has some other
  543. interesting features. See the Usenet newsgroup comp.lang.sather
  544. or the Sather home page at http://www.icsi.berkeley.edu/~sather/.
  545.  
  546.  --------------------
  547.  
  548. QSTD: Are there standards for the Eiffel language?
  549.  
  550. The definition of the Eiffel language is in the public domain. This
  551. definition is controlled by NICE, the Non-profit International
  552. Consortium for Eiffel.
  553.  
  554. The Eiffel trademark is owned and controlled by NICE. NICE is using
  555. Bertrand Meyer's book, "Eiffel: The Language" (2nd Printing), as the
  556. initial definition of the language.
  557.  
  558. In 1995 NICE published the first version (called "Vintage 95") of
  559. the Eiffel Library Kernel Standard (ELKS). Those parts of an Eiffel
  560. application that use only the standard classes and features should
  561. run with minimal change on any compiler supporting ELKS-95.
  562.  
  563. The NICE board members for 1999 are Christine Mingins (Chair),
  564. Geoff Eldridge (Secretary) and Frieder Monninger (Treasurer).
  565.  
  566. NICE website: http://www.eiffel-nice.org/
  567. NICE email: nice@atlanta.twr.com
  568.  
  569. For 1999, NICE has made membership free. People interested in
  570. the standardisation and promotion of Eiffel can join from the web
  571. site. An open email list is available for discussion on topics that
  572. are of interest to the Eiffel community and NICE at:
  573. http://www.egroups.com/list/eiffel-nice-discuss/
  574.  
  575.  --------------------
  576.  
  577. QTGV: How fast do Eiffel applications run?
  578.  
  579. Eiffel is a statically typed object-oriented language using
  580. automatic memory management.
  581.  
  582. Many Eiffel compilers make use of the static typing and perform
  583. extensive global optimisations producing performance comparable
  584. to other well-optimised statically typed languages like C++.
  585.  
  586. Eiffel's assertions are normally enabled during development,
  587. and inevitably slow down execution. Assertions are not usually
  588. compiled in production binaries and so have no impact on the
  589. performance of optimised code.
  590.  
  591. The cost of garbage collection is an often debated point, and
  592. large applications are often dominated by memory management rather
  593. than computation. In principle a style of programming assuming a GC
  594. could be more efficient than typical manual memory management. In
  595. any case, there is nothing in Eiffel making garbage collection less
  596. efficient than any other language where it is used.
  597.  
  598.  --------------------
  599.  
  600. QGRP: Are there any Eiffel user groups?
  601.  
  602. The 'Eiffel Forum' is an organization for individuals interested in
  603. Eiffel. One of the main aims is to put in place a web infrastructure,
  604. similar to the Perl CPAN, to make user or vendor developed resources,
  605. reusable components and supporting information accessible to a wide
  606. and diverse user community.
  607.  
  608. The website is at http://www.eiffel-forum.org/
  609.  
  610. Compiler vendors usually run user groups for their user base, often
  611. in the form of a mailing-list or meetings during conferences. Contact
  612. the individual vendors for more information.
  613.  
  614. South American users of Eiffel can look at the home page of RIPLEG
  615. (Rio de la Plata Eiffel Group) at http://www.angelfire.com/biz2/ripleg/
  616.  
  617.  --------------------
  618.  
  619. QADR: Where can I get Eiffel products and services?
  620.  
  621. These vendors, resellers and suppliers of Eiffel training and
  622. consultancy are listed in alphabetical order:
  623.  
  624.  
  625. AUSTRALIA
  626.  
  627. Class Technology Pty. Ltd.
  628.  POST PO Box 6274, North Sydney NSW 2060, Australia
  629.  TEL +61 2 9922 7222           FAX +61 2 9922 7703
  630.  EMAIL eiffel@class.com.au     WEB http://www.class.com.au/
  631.  
  632.  
  633. EUROPEAN UNION
  634.  
  635. Advanced Media Technology Ltd.
  636.  POST Box 16, Hatolantie 140, SF-34 301 Kuru, Finland
  637.  TEL +358 400 620 236          FAX +358 3 4737 117
  638.  EMAIL jukka.haukijarvi@eiffel.fi
  639.  WEB http://www.eiffel.fi/
  640.  
  641. Cap Gemini France, Division ITMI
  642.  POST Grande Arche - Paroi Nord, F-92044 Paris-la-Defense cedex, France
  643.  TEL +33 149018657             FAX +33 149018650
  644.  EMAIL jnerson@capgemini.fr
  645.  
  646. Eiffel Software Iberica
  647.  POST Isabel II, 4, 1D; 20011 San Sebastian, Spain
  648.  TEL/FAX +34 943 472108
  649.  EMAIL jipferur@si.ehu.es
  650.  
  651. Eiffel Ireland
  652.  POST 45 Hazelwood, Shankill, Co Dublin, Ireland
  653.  TEL +353 1 282 3487
  654.  EMAIL sparker@eiffel.ie       WEB http://www.eiffel.ie/Eiffel/
  655.  
  656. Enea Data
  657.  POST Box 232, Nytorpsvagen 5, S-183 23 Taby, Sweden
  658.  TEL +46 8 638 5000            FAX +46 8 638 50 50
  659.  EMAIL eiffel@enea.se          WEB http://www.enea.se/
  660.  
  661. EtnoTeam
  662.  POST Via Adelaide Bono Cairoli 34, I-20127 Milano, Italy
  663.  TEL +39 2 261621              FAX +39 2 26110755
  664.  EMAIL sales@etnomi.it         WEB http://www.etnomi.it/
  665.  
  666. Everything Eiffel
  667.  POST 6 Bambers Walk, Wesham PR4 3DG, England
  668.  TEL & FAX +44 1772 687525     WEB http://www.eiffel.demon.co.uk/
  669.  EMAIL roger@eiffel.demon.co.uk
  670.  
  671. Halstenbach ACT GmbH
  672.  POST Breidenbrucher Strasse 2, D-51674 Wiehl, Germany
  673.  TEL + 49 2261 9902 0          FAX +49 2261 9902 99
  674.  EMAIL info@halstenbach.de     WEB http://www.halstenbach.de/
  675.  
  676. Langmack & Partner, Feinarbeit
  677.  POST Gitshinner Strasse 91 - 2. Hof, D-10969 Berlin, Germany
  678.  TEL +49 30 616794 61          FAX +49 30 616794 67
  679.  EMAIL langmack@feinarbeit.de
  680.  
  681. Object Tools GmbH
  682.  POST Nordstr. 5, D-35619 Braunfels, Germany
  683.  TEL +49 6472 911030           FAX +49 6472 911031
  684.  EMAIL eiffel@eiffel.de        WEB http://www.eiffel.de/
  685.  
  686. Jan Willamowius
  687.  POST Rueckertstr. 27, D-22089 Hamburg, Germany
  688.  TEL +49 40-20981888
  689.  EMAIL jan@janhh.shnet.org
  690.  
  691.  
  692.  
  693. JAPAN
  694.  
  695. Information and Math Science Lab Inc.
  696.  POST 2-43-1, Ikebukuro, Toshima-ku, Tokyo 171
  697.  TEL +81 3 3590 5211           FAX +81 3 3590 5353
  698.  EMAIL fushimi@imslab.co.jp    WEB http://www.imslab.co.jp/
  699.  
  700.  
  701. NEW ZEALAND
  702.  
  703. Objective Methods Ltd
  704.  POST PO Box 17356 (77 Chamberlain Rd)
  705.        Karori, Wellington, New Zealand
  706.  TEL +64 4 476 9499            FAX +64 4 476 9237
  707.  EMAIL dkenny@actrix.gen.nz
  708.  
  709.  
  710. SWITZERLAND
  711.  
  712. Abstraction
  713.  POST Faubourg de l'Hopital, CH-2000 Neuchatel, Switzerland
  714.  TEL +41 32 7250493            FAX +41 32 7259857
  715.  EMAIL abstraction@access.ch
  716.  
  717.  
  718. UNITED STATES OF AMERICA
  719.  
  720. Halstenbach ACT, Inc.
  721.  POST 827 State Street, Santa Barbara, CA 93101, USA
  722.  TEL +1 805 568 0023           FAX +1 805 884 0806
  723.  EMAIL info@halstenbach.de     WEB http://www.halstenbach.de/
  724.  
  725. Interactive Software Engineering, Inc
  726.  POST ISE Building, 2nd floor, 270 Storke Road, Goleta, CA 93117, USA
  727.  TEL +1 805 685 1006           FAX +1 805 685 6869
  728.  EMAIL info@eiffel.com         WEB http://www.eiffel.com/
  729.  
  730. Object Tools, Inc.
  731.  POST 13267 Summit Sq. Center, Route 413 & Doublewoods Rd,
  732.       Langhorne, PA 19047, USA
  733.  TEL/FAX +1 215 504 0854
  734.  EMAIL info@object-tools.com   WEB http://www.object-tools.com/
  735.  
  736.  
  737.  --------------------
  738.  
  739. QCNF: Are there any conferences for Eiffel users?
  740.  
  741. The conferences listed here are not just for Eiffel. Eiffel shares the
  742. spotlight with other OO languages including C++ and Smalltalk.
  743.  
  744. TOOLS is an international conference devoted to the applications of
  745. OO technology. Other events, such as user group or NICE meetings
  746. are often held in conjunction with TOOLS. http://www.tools.com/
  747.  
  748. The ACM SIGPLAN Conference On Object-Oriented Programming Systems,
  749. Languages and Applications (OOPSLA) is probably the largest technical
  750. conference about OO Technology. OOPSLA home page is at
  751. http://www.acm.org/sigplan/oopsla/
  752.  
  753. ECOOP is the annual European Conference for Object-Oriented
  754. Programming. http://www.iam.unibe.ch/ECOOP/
  755.  
  756.  --------------------
  757.  
  758. QECC: Why do most Eiffel implementations compile to C?
  759.  
  760. By using C as a target language, an Eiffel implementor can:
  761.  
  762.  - bring Eiffel to the marketplace faster and at lower cost
  763.  - port their implementation more easily to other platforms
  764.  - take advantage of optimisation provided by the C compiler
  765.  
  766. Much of the technology that makes Eiffel relatively simple to use also
  767. makes it more difficult to implement (an Eiffel-to-C compiler is
  768. perhaps 4 to 5 times more difficult to create than a native Pascal
  769. compiler).
  770.  
  771. Compiling Eiffel to C seems to work well under Unix. C is sometimes
  772. thought of as the native code of Unix.
  773.  
  774. On the other hand, C is not universal on other platforms, and the
  775. Eiffel purchaser may need to buy a C compiler as well, and possibly
  776. replace it if the supported C compilers change with new versions of
  777. the Eiffel compiler.
  778.  
  779. With a native-code compiler, you may get somewhat better throughput
  780. and the potential for smaller executables and slightly better
  781. performance.
  782.  
  783.  --------------------
  784.  
  785. QJVM: Where can I get an Eiffel to Java compiler?
  786.  
  787. Since Java became fashionable, everyone wants their favourite
  788. language to be compiled for the JVM (Java Virtual Machine)'s byte
  789. code. It is tempting to think about providing Eiffel compilation
  790. to this platform with total interoperability between Java and Eiffel
  791. code.
  792.  
  793. Unfortunately, things are not as simple as they look at first sight.
  794. There are fundamental differences between the Java and Eiffel object
  795. models (dynamic vs. static object systems, single vs. multiple
  796. inheritance, design by contract vs. wishful thinking, are among the
  797. problems).
  798.  
  799. While it is of course possible to provide a compiler from Eiffel to
  800. the JVM (which is a Turing machine), it comes necessarily at a cost,
  801. be it performance or interoperability or both. It is unlikely in the
  802. foreseeable future to have an Eiffel to JVM compiler where it is
  803. possible to mix and match freely classes written in Java and Eiffel
  804. classes without having to worry about which language they are
  805. written in.
  806.  
  807. Nevertheless, most compiler vendors are moving towards providing
  808. some support for the JVM, with differing limitations depending on
  809. the vendor and implementation strategy.
  810.  
  811. SmallEiffel is the first compiler available to produce some
  812. usable result on the JVM. ISE and Object Tools have announced
  813. ongoing efforts to support Java. Pirmin Kalberer provides an
  814. early version of an Eiffel to JVM compiler.
  815.  
  816.  --------------------
  817.  
  818. LFEA: What features does Eiffel have?
  819.  
  820. Eiffel is a pure object-oriented language. Its modularity is based on
  821. classes. It stresses reliability, and facilitates design by contract.
  822. It brings design and programming closer together. It encourages the
  823. re-use of software components.
  824.  
  825. Eiffel offers classes, multiple inheritance, polymorphism, static
  826. typing and dynamic binding, genericity (constrained and
  827. unconstrained), a disciplined exception mechanism, systematic use of
  828. assertions to promote programming by contract, and deferred classes
  829. for high-level design and analysis.
  830.  
  831. Eiffel has an elegant design and programming style, and is easy to
  832. learn.
  833.  
  834. An overview is available at
  835. http://www.eiffel.com/doc/manuals/language/intro/
  836.  
  837.  --------------------
  838.  
  839. LCHN: What changes have been made to the Eiffel language definition?
  840.  
  841. Eiffel is still a relatively new language, and there have been a
  842. number of changes to its definition.
  843.  
  844. There were significant changes between the publication of
  845. "Object-Oriented Software Construction", first edition in 1988,
  846. and the release of Eiffel 2.3.
  847.  
  848. More significant changes came with the introduction of Eiffel 3, the
  849. current and only version of the language in use today. These changes
  850. are summarised in Eiffel: The Language.
  851.  
  852. There were some less significant changes between the first
  853. and second printings of "Eiffel: The Language":
  854.  
  855.    - New basic types INTEGER_REF, REAL_REF, CHARACTER_REF and
  856.      BOOLEAN_REF etc have been introduced to provide non-expanded
  857.      basic types.
  858.  
  859.    - Introduction of the POINTER type to enable external references to
  860.      be passed around in Eiffel programs.
  861.  
  862.    - Calls from Eiffel to external routines no longer implicitly pass
  863.      the current object as the first parameter.
  864.  
  865. There are many other (more minor) changes, which Neil Wilson has
  866. summarized in ftp://ftp.cm.cf.ac.uk/pub/eiffel/Docs.
  867.  
  868. Since then the following change has been adopted and widely
  869. implemented:
  870.  
  871.    - The Precursor construct allows the ancestor's version of
  872.      a redefined feature to be conveniently called (see LPAR).
  873.  
  874.  
  875.  --------------------
  876.  
  877. LLIB: What libraries come with Eiffel?
  878.  
  879. All vendors aim to support the Eiffel Library Standard kernel classes.
  880.  
  881. In addition, extensive library classes are supplied with the compilers
  882. including data structures, graphics, lexical analysis and parsing, IO,
  883. persistence, formatting and more.
  884.  
  885. Contact the vendors for further details.
  886.  
  887.  --------------------
  888.  
  889. LDBC: What's the big deal about preconditions and postconditions?
  890.  
  891. The big deal is that it supports programming by contract. For example,
  892. preconditions (require clauses) are simple boolean statements that are
  893. used to check that the input arguments are valid and that the object
  894. is in a reasonable state to do the requested operation. If not, an
  895. exception is generated. Similarly, postconditions (ensure clauses)
  896. make sure that a method has successfully performed its duties, thus
  897. "fulfilling its contract" with the caller. Invariants are boolean
  898. expressions that are checked every time an object method returns back
  899. to a separate object.
  900.  
  901. You can use these ideas in any OO programming language, but usually
  902. must supply your own assertion mechanisms or rely on programmer
  903. discipline. In Eiffel, the ideas are integrated into the whole fabric
  904. of the environment. We find them used by:
  905.  
  906.  - the exception handling mechanism.
  907.    (Tracebacks almost always identify the correct culprit code since
  908.    preconditions almost always denote an error in the calling method,
  909.    while postconditions denote an error in the called method.)
  910.  
  911.  - the automatic compilation system.
  912.    (Assertions can be disabled entirely or selectively by type on a
  913.    per class basis.)
  914.  
  915.  - the Eiffel compiler
  916.    (Invariants, preconditions and postconditions are all inherited in
  917.    a manner that makes logical sense.)
  918.    (Assertion expressions are not allowed to produce side effects so
  919.    they can be omitted without effect.)
  920.  
  921.  - the automatic documentation tools
  922.    (Preconditions and postconditions are important statements about
  923.    what a method does, often effectively describing the "contract"
  924.    between the caller and callee. Invariants can yield information
  925.    about legal states an object can have.)
  926.  
  927. In the future we expect to see formal methods technology work its way
  928. into the assertion capability. This will allow progressively more
  929. powerful constraints to be put into place. In addition, Meyer has
  930. argued in his concurrency model (see LTSK) that assertions play
  931. a central role in concurrent and distributed object-oriented
  932. programming.
  933.  
  934.  --------------------
  935.  
  936. LCON: Please explain and discuss covariance vs. contravariance.
  937.  
  938. Consider the following situation: we have two classes PARENT and
  939. CHILD. CHILD inherits from PARENT, and redefines PARENT's feature
  940. 'foo'.
  941.  
  942.    class PARENT
  943.       feature
  944.          foo (arg: A) is ...
  945.    end
  946.  
  947.    class CHILD
  948.       inherit
  949.          PARENT redefine foo end
  950.       feature
  951.          foo (arg: B) is ...
  952.    end
  953.  
  954. The question is: what restrictions are placed on the type of argument
  955. to 'foo', that is 'A' and 'B'? (If they are the same, there is no
  956. problem.)
  957.  
  958. Here are two possibilities:
  959.  
  960.    (1)  B must be a child of A (the covariant rule - so named because
  961.         in the child class the types of arguments in redefined
  962.         routines are children of types in the parent's routine, so the
  963.         inheritance "varies" for both in the same direction)
  964.  
  965.    (2)  B must be a parent of A (the contravariant rule)
  966.  
  967. Eiffel uses the covariant rule.
  968.  
  969. At first, the contravariant rule seems theoretically appealing. Recall
  970. that polymorphism means that an attribute can hold not only objects of
  971. its declared type, but also of any descendant (child) type. Dynamic
  972. binding means that a feature call on an attribute will trigger the
  973. corresponding feature call for the *actual* type of the object, which
  974. may be a descendant of the declared type of the attribute. With
  975. contravariance, we can assign an object of descendant type to an
  976. attribute, and all feature calls will still work because the
  977. descendant can cope with feature arguments at least as general as
  978. those of the ancestor. In fact, the descendant object is in every way
  979. also a fully-valid instance of the ancestor object: we are using
  980. inheritance to implement subtyping.
  981.  
  982. However, in programming real-world applications we frequently need to
  983. specialize related classes jointly.
  984.  
  985. Here is an example, where PLOT_3D inherits from PLOT, and
  986. DATA_SAMPLE_3D inherits from DATA_SAMPLE.
  987.  
  988.    class PLOT
  989.       feature
  990.          add(arg: DATA_SAMPLE) is ...
  991.  
  992.    class PLOT_3D
  993.       inherit
  994.          PLOT redefine add end
  995.       feature
  996.          add(arg: DATA_SAMPLE_3D) is ...
  997.  
  998. This requires the covariant rule, and works well in Eiffel.
  999.  
  1000. It would fail if we were to put a PLOT_3D object into a PLOT attribute
  1001. and try to add a DATA_SAMPLE to it. It fails because we have used
  1002. inheritance to implement code re-use rather than subtyping, but have
  1003. called a feature of the ancestor class on an object of the descendant
  1004. class as if the descendant object were a true subtype. It is the
  1005. compiler's job to detect and reject this error, to avoid the
  1006. possibility of a run-time type error.
  1007.  
  1008. Here's another example where a real-world situation suggests a
  1009. covariant solution. Herbivores eat plants. Cows are herbivores. Grass
  1010. is a plant. Cows eat grass but not other plants.
  1011.  
  1012.    class HERBIVORE                               class PLANT
  1013.    feature
  1014.       eat(food: PLANT) is ...
  1015.       diet: LIST[PLANT]
  1016.  
  1017.    class COW                                     class GRASS
  1018.    inherit                                       inherit
  1019.       HERBIVORE                                     PLANT
  1020.          redefine eat
  1021.       end
  1022.    feature eat(food: GRASS) is ...
  1023.  
  1024. This does what we want. The compiler must stop us from putting a COW
  1025. object into a HERBIVORE attribute and trying to feed it a PLANT, but
  1026. we shouldn't be trying to do this anyway.
  1027.  
  1028. Also consider the container 'diet'. We are not forced to redefine this
  1029. feature in descendant classes, because with covariant redefinition of
  1030. the argument to 'eat', the feature 'diet' can always contain any
  1031. object that can be eaten (e.g. grass for a cow). (With contravariant
  1032. redefinition of the argument to 'eat', it would be necessary to
  1033. re-open the parent class to make the type of the container 'diet' more
  1034. general).
  1035.  
  1036. To summarise: Real-world problems often lend themselves to covariant
  1037. solutions. Eiffel handles these well. Incorrect programs in the
  1038. presence of covariant argument redefinition can cause run-time type
  1039. errors unless the compiler catches these.
  1040.  
  1041. Sather uses the contravariant rule, but uses separate mechanisms for
  1042. subtyping and code reuse and only allows dynamic binding on true
  1043. subtypes. This seems to make contravariance work well, but it can
  1044. force the Sather programmer to use concrete types when modelling
  1045. covariant problems. Concrete types cannot be further subtyped in
  1046. Sather, so this can reduce the potential for re-use (in Eiffel, any
  1047. type can be further subtyped, but the compiler must check that it is
  1048. used validly).
  1049.  
  1050.  --------------------
  1051.  
  1052. LCAT: Is it true that there are "holes" in the Eiffel type system?
  1053.  
  1054. Eiffel was designed to makes it possible to catch all type errors at
  1055. compile time, so that an Eiffel program could not abort with a run time
  1056. type error.
  1057.  
  1058. However, there are some more complex cases where the type checking
  1059. is more difficult. The solution in Eiffel the Language, system level
  1060. validity checking, requires a global analysis of the whole system,
  1061. which has proven too complex and too impractical to implement.
  1062.  
  1063. Object Oriented Software Construction, second edition, offers a new
  1064. simpler way to check for those errors that may, if refined, provide
  1065. effective type checking but it has been questionned whether it is
  1066. too drastic so that it will make many common patterns invalid.
  1067.  
  1068. The main system-level type errors are:
  1069.  (a) restriction of exports in a descendant class.
  1070.  (b) covariant redefinition of routines parameters as in question LCON.
  1071.  (c) covariant signatures in conforming types of a generic class
  1072.      (like 'put' in LIST[ANY] and LIST[STRING])
  1073.  (d) more obscure cases like selection of a feature that returns a
  1074.      precursor type in a multiple inheritance hierarchy, or
  1075.      indirect assignment of references to an expanded ancestor.
  1076.  
  1077. No compiler currently available implements these checks and behaviour
  1078. in those cases range from run-time type errors to system crashes.
  1079.  
  1080.  --------------------
  1081.  
  1082. LTSK: Is there support for concurrency in Eiffel?
  1083.  
  1084. Eiffel does support concurrency in the latest specification for the
  1085. language as defined by Interactive Software Engineering (ISE). A
  1086. more complete description on concurrency -- the SCOOP (Simple
  1087. Concurrent Object-Oriented Programming) model -- can be found
  1088. in chapter 30 of "Object Oriented Software Construction 2ed" by
  1089. Bertrand Meyer. Papers are also available from ISE web site at
  1090. http://www.eiffel.com/doc/manuals/technology/concurrency/ .
  1091.  
  1092. Some compilers also support various forms of multithreading
  1093. independently of SCOOP.
  1094.  
  1095.  --------------------
  1096.  
  1097. LOVL: Why doesn't Eiffel allow function overloading?
  1098.  
  1099. In Eiffel, no two features of a class may have the same identifier,
  1100. regardless of their respective signatures.  This prevents the use of
  1101. function overloading ("multiple polymorphism"), a common programming
  1102. technique in languages like C++.
  1103.  
  1104. Eiffel is designed to be minimal: it includes exactly the features
  1105. that its designer considered necessary, and nothing else.
  1106.  
  1107. Because Eiffel already supports (single) polymorphism through its
  1108. inheritance system, the only positive thing that function overloading
  1109. buys you is reducing the number of feature names you have to learn.
  1110. This is at the expense of reducing the ability of the compiler to trap
  1111. mistakes (often type errors).
  1112.  
  1113. Readability is also enhanced when overloading is not possible. With
  1114. overloading you would need to consider the type of the arguments as
  1115. well as the type of the target before you can work out which feature
  1116. is called. With multiple inheritance and dynamic binding this is
  1117. awkward for a compiler and error-prone for a human. There is no
  1118. intuitive rule which could be used to disambiguate routine calls where
  1119. there is no "nearest" routine.
  1120.  
  1121. However, in Eiffel it's easy to write one routine with arguments of
  1122. the most general applicable type, then use the assignment attempt
  1123. operator to carry out the appropriate operation according to the
  1124. run-time type of the arguments (thereby explicitly programming the
  1125. disambiguation "rules").
  1126.  
  1127. Having said that, the lack of multiple polymorphism does force us to
  1128. write some common mathematical operations (e.g. matrix math) in an
  1129. awkward way, and forces arithmetic expressions to be treated specially
  1130. (the "arithmetic balancing rule", ETL p385). But no-one has come up
  1131. with a solution which is so simple, elegant and useful that it
  1132. improves the quality of Eiffel as a whole.
  1133.  
  1134.  --------------------
  1135.  
  1136. LPRC: Why are there no procedural types in Eiffel?
  1137.  
  1138. A proposal is currently under consideration by NICE to add routine
  1139. types to the language.
  1140.  
  1141. The reason why these types were not implemented earlier, is that
  1142. the notion of allowing a routine to be passed as an argument to a
  1143. routine is in many people's view incompatible with the OO method.
  1144. The definition of object-orientation implies that every operation
  1145. belongs to an object type, so one does not manipulate routines
  1146. just by themselves.
  1147.  
  1148. Nevertheless, routine types can be useful in some specialist cases,
  1149. like interfaces to other object systems, some forms of reflection,
  1150. etc. The proposed extension is indeed not intended for general use,
  1151. although there is concern that it may become used beyond the
  1152. specialist cases when available.
  1153.  
  1154.  --------------------
  1155.  
  1156. LATR: Why are there no class attributes in Eiffel?
  1157.  
  1158. In Eiffel, the "once" function provides greater functionality in a
  1159. more disciplined way. The body of a "once" function is executed once
  1160. only per system (not per instance of the class), when it is first
  1161. called. Thereafter, the "once" function returns the same Result
  1162. without re-executing its body.
  1163.  
  1164. The "once" function can therefore be used to implement a shared
  1165. attribute of reference type (initialized on its first use).
  1166.  
  1167. A "once" function can be included in a mixin class. The shared
  1168. attribute returned by that once function is then available to all
  1169. instances of classes which inherit from the mixin class.
  1170.  
  1171.  --------------------
  1172.  
  1173. LPAR: How can I call the parent-class version of a redefined routine?
  1174.  
  1175. When an inherited routine is redefined in a child class, is there a
  1176. way for the redefined routine to call the version in the parent class?
  1177.  
  1178. 1) If you are responsible for the design of the parent class, you may
  1179.    anticipate such a need. You may provide multiple versions of the
  1180.    same routine body, with some versions frozen (not redefinable):
  1181.  
  1182.    class PARENT
  1183.    feature foo, frozen parent_foo is
  1184.       do
  1185.          ...
  1186.       end
  1187.    end
  1188.  
  1189.    class CHILD
  1190.    inherit
  1191.       PARENT
  1192.          redefine foo
  1193.       end
  1194.    feature foo is
  1195.       do
  1196.          parent_foo
  1197.          ...
  1198.       end
  1199.    end
  1200.  
  1201. 2) Otherwise, you use repeated inheritance to get two versions of
  1202.    'foo', and redefine one of them:
  1203.  
  1204.    class PARENT
  1205.    feature foo is
  1206.       do
  1207.          ...
  1208.       end
  1209.    end
  1210.  
  1211.    class CHILD
  1212.    inherit
  1213.       PARENT
  1214.          rename foo as parent_foo
  1215.       end
  1216.       PARENT
  1217.          redefine foo
  1218.          select foo  -- (in case of dynamic binding)
  1219.       end
  1220.    feature
  1221.       foo is
  1222.          do
  1223.             parent_foo
  1224.             ...
  1225.          end
  1226.    end
  1227.  
  1228. 3) While usable both these constructs have their limitations and a
  1229.    proposal is under way to replace them with a more direct solution:
  1230.    the new reserved word Precursor that allows to call the parent
  1231.    version of a redefined routine in its body. In the rare cases when
  1232.    a routine has more than one precursor, the call can be qualified to
  1233.    specify which precursor is called.
  1234.  
  1235.    Under this proposal, the example becomes:
  1236.  
  1237.     class CHILD
  1238.     inherit
  1239.        PARENT
  1240.           redefine foo
  1241.        end
  1242.     feature
  1243.        foo is
  1244.           do
  1245.              Precursor -- call previous version
  1246.              ...
  1247.           end
  1248.  
  1249.  --------------------
  1250.  
  1251. LEVC: Where can I find a comparison between Eiffel and other languages?
  1252.  
  1253. In Richard Wiener's book "Software Development Using Eiffel: There can
  1254. be life after C++" (Prentice-Hall, ISBN 0-13-100686-X).
  1255.  
  1256. Ian Joyner's "C++ critique" includes a comparison between C++, Eiffel
  1257. and other languages. It is at the following URL:
  1258. http://www.progsoc.uts.edu.au/~geldridg/cpp/cppcv3.html
  1259.  
  1260. You can also find a comparison of Eiffel, C++, Java, and Smalltalk at
  1261. ISE's Web site, http://www.eiffel.com/doc/manuals/technology/oo_comparison/
  1262.  
  1263.  --------------------
  1264.  
  1265. LDES: Are there any destructors in Eiffel?
  1266.  
  1267. Eiffel objects are garbage-collected, so that there is no need for the
  1268. software developer to worry about whether, how and when to "destroy"
  1269. or "free" them in the software text.
  1270.  
  1271. Some implementations offer a "free" procedure for programmers who
  1272. absolutely want to remove an object manually. Such a procedure is "use
  1273. at your own risk" and is not needed in normal Eiffel development.
  1274.  
  1275. Coming back to normal usage, the need may arise to ensure that certain
  1276. operations will automatically take place whenever the garbage
  1277. collector reclaims an object. For example if an Eiffel object
  1278. describing a file becomes unreachable and hence is eventually
  1279. garbage-collected, you may want to ensure that the physical file will
  1280. be closed at that time. Some implementations of Eiffel provide a
  1281. mechanism for that purpose: procedure 'dispose' from the Kernel
  1282. Library class MEMORY.
  1283.  
  1284. Whenever the garbage collector collects an object, it calls 'dispose'
  1285. on that object. The procedure does nothing by default (so that a smart
  1286. GC will of course avoid executing any actual call). But any class may
  1287. inherit from MEMORY and redefine 'dispose' to perform appropriate
  1288. actions, such as closing a file. Such actions are sometimes called
  1289. "finalization". This technique achieves it conveniently.
  1290.  
  1291. Because there is no guarantee as to the order in which the garbage
  1292. collector will reclaim objects that have become unreachable, safe
  1293. redefinitions of 'dispose' should only act on external resources such
  1294. as file descriptors, database elements, window system resources etc,
  1295. not on Eiffel object structures themselves.
  1296.  
  1297.  --------------------
  1298.  
  1299. LDIS: How do I implement multiple inheritance efficiently?
  1300.  
  1301. People with a background in C++ or single-inheritance languages
  1302. often think that multiple inheritance carries a penalty because
  1303. it cannot be implemented using the classic dispatch table scheme
  1304. (where every polymorphic feature has a fixed position in a pointer
  1305. table that descendants can customise without breaking any code
  1306. using the fixed position of an ancestor's polymorphic feature.)
  1307.  
  1308. There are other ways to implement inheritance which allows Eiffel
  1309. not to suffer performance problems because of multiple inheritance.
  1310. Eiffel compilers generally use one of two methods.
  1311.  
  1312. In both cases, we need to assume that every type in the system is
  1313. assigned an integer identifier -- the type ID.
  1314.  
  1315. The first implementation is the 'sparse matrix' model. Every
  1316. polymorphic feature has an associated pointer table with an entry
  1317. for each type, indexed by type ID. This allows all polymorphic
  1318. calls to be executed at the (same) cost of a single pointer
  1319. derefence.
  1320.  
  1321. The immediate drawback of this, is that it generates a rather big
  1322. data table (a matrix of all polymorphic routines per all types in
  1323. a system). Fortunately, there are sparse matrix algorithms allowing
  1324. to compress these tables efficiently by carefully selecting the IDs
  1325. (an evident optimisation is to try to group all descendant next
  1326. to their parent so that only a short section of the type ID space
  1327. need be covered).
  1328.  
  1329. The other method is completely different and uses the equivalent of
  1330. an inspect statement on the type ID, calling the appropriate static
  1331. function for each concrete type. In this case, it is obvious that the
  1332. compiler needs a global knowlegde of the system: for each polymorphic
  1333. routine call, it needs to know all concrete subtypes really used in
  1334. the system, and all redefinitions of the routines.
  1335.  
  1336. At first sight, it could be thought that the inspect statement could
  1337. slow down the system. Actual compilers using this solution have proved
  1338. that they can be as efficient as (or more than) those implemented
  1339. using the first method.
  1340.  
  1341. It should now be clear that, for both methods, it is necessary
  1342. for the compiler to have at compile time -- or at the very least at
  1343. optimisation time -- a view of the complete system. This could appear
  1344. like a serious restriction but it is not much of a concern because
  1345. Eiffel compilers must have this view in the first place in order to
  1346. be able to differenciate between static and polymorphic routines --
  1347. all routines being potentially polymorphic in Eiffel -- and this
  1348. must be done to have compiled systems perform reasonably.
  1349.  
  1350.  --------------------
  1351.  
  1352. LISA: How does the `Iterating several actions' example in ETL work?
  1353.  
  1354. The example code page 176 of Eiffel: The Language, 2nd printing does
  1355. not work with any widely available compiler. It has confused and
  1356. puzzled many newcomers to the language and what it is supposed to
  1357. do is not clearly defined in the language definition.
  1358.  
  1359. What the example should do is as follows. When a feature is replicated
  1360. under multiple inheritance (renamed so that the feature is now known
  1361. under two names) and in the same inheritance clause a routine or
  1362. attribute its source text references is also replicated, the routine
  1363. body of the first feature should be adapted to call the corresponding
  1364. replicated features on each path of the inheritance. The mechanism
  1365. is not intended to scale to more complex cases where the replication
  1366. do not occur in a single inheritance clause.
  1367.  
  1368. There is no consensus on whether this feature should be discarded
  1369. completely because of the the conceptual complexity and odd
  1370. side-effects or better defined and actually implemented.
  1371.